/**   
 * Copyright © 2020 eSunny Info. Tech Ltd. All rights reserved.
 * 
 * 功能描述：
 * @Package: cn.xuan.hello.hellocontroller 
 * @author: 86187   
 * @date: 2020年6月2日 上午11:56:20 
 */
package cn.xuan.hello.hellocontroller;

import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import cn.xuan.common.Msg;

/**
 * Copyright: Copyright (c) 2020
 * 
 * @ClassName: FileController.java
 * @Description: 文件处理
 *
 * @version: v1.0.0
 * @author: 86187
 * @date: 2020年6月2日 上午11:56:20
 *
 *        Modification History: Date Author Version Description
 *        ---------------------------------------------------------* 2020年6月2日
 *        86187 v1.0.0 修改原因
 */
@Controller
@RequestMapping("/files")
public class FileController {
	@ResponseBody
	@RequestMapping("/FileUpload")
	public Map<String, Object> fileUpload(HttpServletRequest request) throws Exception {

		// 获取原生真实路径
		String realPath = request.getSession().getServletContext().getRealPath("/uploads/");

		// 创建文件 ， 判断是否存在此文件夹
		File file = new File(realPath);
		if (!file.exists()) {
			boolean mkdirs = file.mkdirs();
			System.out.println("isCreating? " + mkdirs);
		}
		// 打印文件地址便于查看
		System.out.println("file exitst ..." + realPath);

		// 配置DiskFile工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 使用Servlet
		ServletFileUpload fileUpload = new ServletFileUpload(factory);
		// 解析request
		List<FileItem> items = fileUpload.parseRequest(request);
		// 判断文件是什么类型的
		for (FileItem item : items)
			if (item.isFormField()) {
				// 普通类型
				String name = item.getFieldName();
				if (name.equals("filename")) {
					// 输出表单字段的值
					System.out.print(item.getString("UTF-8") + "上传了文件。");
				}

			} else {
				System.out.println("文件字段");
				// 文件类型
				// 1.获取文件名字
				String name = item.getName();
				// 添加一个随机值与文件名拼串
				String s = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
				// 拼串
				name = s + "_" + name;
				// 上传文件
				item.write(new File(realPath, name));
				// 删除零食文件
				item.delete();

			}
		Msg msg = new Msg(Msg.MSG_FLAG_SUCESS, "", "");
		return msg.msgToMap();
	}
	@ResponseBody
	@RequestMapping("/FileUpload2")
	public Map<String, Object> fileUpload2(HttpServletRequest request, MultipartFile filename) throws Exception {
		// 原生实现文件上传
		// 获取原生真实路径
		String realPath = request.getSession().getServletContext().getRealPath("/uploads/");
		// 创建文件 ， 判断是否存在此文件夹
		File file = new File(realPath);
		if (!file.exists()) {
			boolean mkdirs = file.mkdirs();
			System.out.println("isCreating?" + mkdirs);
		}
		System.out.println("file exitst ..." + realPath);
		// 获取到上传文件的名称 == item.getFileName()
		String name = filename.getOriginalFilename();
		String s = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
		name = s + "_" + name;
		// 上传文件
		filename.transferTo(new File(realPath, name));


		Msg msg = new Msg(Msg.MSG_FLAG_SUCESS, "", "");
		return msg.msgToMap();

	}

}
